import argparse
from typing import Optional, List
from pathlib import Path
from core.data_loader import DataLoader
from core.analyzer import DataAnalyzer
from core.commands import (
    analyze_data,
    search_data,
    visualize_data,
    export_data,
    stats_report
)

def setup_parser():
    """设置命令行参数解析器"""
    parser = argparse.ArgumentParser(
        description='MiniBox Pro - 多功能数据分析工具',
        formatter_class=argparse.RawTextHelpFormatter
    )
    subparsers = parser.add_subparsers(dest='command', help='可用命令')
    
    # 分析命令
    analyze_parser = subparsers.add_parser('analyze', help='分析数据文件')
    analyze_parser.add_argument('source', help='数据源路径(文件/URL/数据库)')
    analyze_parser.add_argument('--type', help='指定源类型(自动检测)', 
                              choices=['excel', 'csv', 'json', 'sqlite', 'api'])
    analyze_parser.add_argument('--sheet', help='Excel工作表名称', default=None)
    analyze_parser.add_argument('--table', help='数据库表名', default=None)
    analyze_parser.add_argument('--query', help='SQL查询语句', default=None)
    analyze_parser.add_argument('--output', help='输出结果文件', default='report.txt')
    
    # 搜索命令
    search_parser = subparsers.add_parser('search', help='搜索数据')
    search_parser.add_argument('source', help='数据源路径')
    search_parser.add_argument('keyword', help='搜索关键词')
    search_parser.add_argument('--columns', nargs='+', help='限定搜索的列', default=None)
    search_parser.add_argument('--exact', action='store_true', help='精确匹配')
    search_parser.add_argument('--output', help='输出结果文件', default=None)
    
    # 可视化命令
    viz_parser = subparsers.add_parser('visualize', help='生成可视化图表')
    viz_parser.add_argument('source', help='数据源路径')
    viz_parser.add_argument('--type', choices=['hist', 'scatter', 'box', 'line', 'pie'], 
                          help='图表类型', required=True)
    viz_parser.add_argument('--x', help='X轴列名', required=True)
    viz_parser.add_argument('--y', help='Y轴列名', default=None)
    viz_parser.add_argument('--group', help='分组列名', default=None)
    viz_parser.add_argument('--output', help='输出图片路径', default='plot.png')
    
    # 导出命令
    export_parser = subparsers.add_parser('export', help='导出数据')
    export_parser.add_argument('source', help='数据源路径')
    export_parser.add_argument('format', choices=['csv', 'excel', 'json', 'html'], 
                              help='导出格式')
    export_parser.add_argument('--output', help='输出文件路径', required=True)
    
    # 统计报告命令
    report_parser = subparsers.add_parser('report', help='生成详细统计报告')
    report_parser.add_argument('source', help='数据源路径')
    report_parser.add_argument('--output', help='输出HTML报告路径', default='report.html')
    
    return parser

def main():
    parser = setup_parser()
    args = parser.parse_args()
    
    if not args.command:
        parser.print_help()
        return
    
    try:
        # 初始化数据加载器
        loader = DataLoader()
        
        # 根据命令执行不同操作
        if args.command == 'analyze':
            analyze_data(loader, args)
        elif args.command == 'search':
            search_data(loader, args)
        elif args.command == 'visualize':
            visualize_data(loader, args)
        elif args.command == 'export':
            export_data(loader, args)
        elif args.command == 'report':
            stats_report(loader, args)
            
    except Exception as e:
        print(f"错误: {e}")
        sys.exit(1)

if __name__ == '__main__':
    main()